package exercicio00;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Vector;


public class Conferencia {
 
	private static int autoIncremento;
	
	private int id;
	private String titulo;
	private String tema;
	private String local;	 
	private Date inicio;
	private Date termino;	 
	private float valorInscricao;	 
	private int limiteInscricoes;	 
	private Endereco endereco;
	private Vector<Sessao> sessoes;
	private Vector<Sala> salas;
	private Vector<Apresentador> apresentadores;
	private Vector<Equipamento> equipamentos;
	
	/*
	private List<Inscricao> inscricoes;	 
	private List<Informacao> informacoes;
	private List<Usuario> usuario;	 
	*/
	
	public Conferencia() {
		salas = new Vector<Sala>();
		sessoes = new Vector<Sessao>();
		apresentadores = new Vector<Apresentador>();
		equipamentos = new Vector<Equipamento>();
		DadosConferenciaStub dados = new DadosConferenciaStub();
		
		Sala sala;
		do {
			sala = dados.getNextSala();
			
			if (sala != null) {
				salas.add(sala);
			}
		}
		while (sala != null);

		Sessao sessao;
		do {
			sessao = dados.getNextSessao();
			
			if (sessao != null) {
				sessoes.add(sessao);
			}
		}
		while (sessao != null);
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getTema() {
		return tema;
	}

	public void setTema(String tema) {
		this.tema = tema;
	}

	public String getLocal() {
		return local;
	}

	public void setLocal(String local) {
		this.local = local;
	}

	public Date getInicio() {
		return inicio;
	}

	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}

	public Date getTermino() {
		return termino;
	}

	public void setTermino(Date termino) {
		this.termino = termino;
	}

	public float getValorInscricao() {
		return valorInscricao;
	}

	public void setValorInscricao(float valorInscricao) {
		this.valorInscricao = valorInscricao;
	}

	public int getLimiteInscricoes() {
		return limiteInscricoes;
	}

	public void setLimiteInscricoes(int limiteInscricoes) {
		this.limiteInscricoes = limiteInscricoes;
	}
	
	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}	
	
	public int getNroDiasConferencia() {
		Calendar calInicio = Calendar.getInstance();
		Calendar calTermino = Calendar.getInstance();
		
		calInicio.setTime(inicio);
		calTermino.setTime(termino);

		return calTermino.get(Calendar.DATE)- calInicio.get(Calendar.DATE);		
	}

	public int getNroSalas() {
		return salas.size();
	}
	
	public Vector<Sala> gerarCalendario() {
		int index = 0;
		
		for (Sessao sessao : sessoes) {
			Sala sala = salas.get(index);
			
			sala.addSessao(sessao);		
			
			if (index >= salas.size()) {
				index = 0;
			}
		}
			
		return salas;		
	}
	
	public Vector<Sessao> getSessoes() {
		
		return sessoes;
	}

	/*
	public List<Inscricao> getInscricoes() {
		return inscricoes;
	}

	public void setInscricoes(List<Inscricao> inscricoes) {
		this.inscricoes = inscricoes;
	}

	public List<Informacao> getInformacoes() {
		return informacoes;
	}

	public void setInformacoes(List<Informacao> informacoes) {
		this.informacoes = informacoes;
	}
	
	public Patrocionador getPatriocionador() {
		return patriocionador;
	}

	public void setPatriocionador(Patrocionador patriocionador) {
		this.patriocionador = patriocionador;
	}

	public List<Sessao> getSessoes() {
		return sessoes;
	}

	public void setSessoes(List<Sessao> sessoes) {
		this.sessoes = sessoes;
	}

	public List<Usuario> getUsuario() {
		return usuario;
	}

	public void setUsuario(List<Usuario> usuario) {
		this.usuario = usuario;
	}

	public List<Sala> getSala() {
		return sala;
	}

	public void setSala(List<Sala> sala) {
		this.sala = sala;
	}

	public Equipamento getEquipamento() {
		return equipamento;
	}

	public void setEquipamento(Equipamento equipamento) {
		this.equipamento = equipamento;
	}

	public Apresentador getApresentador() {
		return apresentador;
	}

	public void setApresentador(Apresentador apresentador) {
		this.apresentador = apresentador;
	}
	*/
	
	
	/*
	public void AdicionarInformacao(Informacao info) {
	 
	}
	 
	public Inscricao buscaInscricao() {
		return null;
	}
	 
	public void adicionarInscricao(Inscricao inscricao) {
	 
	}
	 
	public Apresentador buscaApresentador(String nome) {
		return null;
	}
	 
	public TipoSessao buscaTipoSessao(int idTipoSessao) {
		return null;
	}
	 
	public Documento buscaDocumento(String idDocumento) {
		return null;
	}
	 
	public Equipamento buscaEquipamento(String idEquipamento) {
		return null;
	}
	 
	public Sala buscaSala(int idSala) {
		return null;
	}

	public void adicionarSessao(Sessao sessao) {
	 
	}
	*/
	
	
	public Boolean salvar(Conferencia conferencia) {
		ListaConferencia listaConferencia = ListaConferencia.getInstance();
		List<Conferencia> lista = listaConferencia.getConferencias();
		if(conferencia.getId() == 0) {
			conferencia.setId(++autoIncremento);
			return lista.add(conferencia);
		} else {
			return alterar(conferencia);
		}
	}
	
	private Boolean alterar(Conferencia conferencia) {
		ListaConferencia listaConferencia = ListaConferencia.getInstance();
		List<Conferencia> lista = listaConferencia.getConferencias();
		for(int i=0; i<lista.size(); i++) {
			if(lista.get(i).equals(conferencia)) {
				lista.set(i, conferencia);
				return Boolean.TRUE;
			}
		}
		return Boolean.FALSE;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Conferencia other = (Conferencia) obj;
		if (id != other.id)
			return false;
		return true;
	}
	 
}
 
